/*
 * @Description: 数据库核心功能
 * @Author: duan_shuangjun 丶
 * @Date: 2025-08-21 13:00:00
 */
import Database from 'better-sqlite3'
import path from 'path'
import { app } from 'electron'

// 数据库实例
let db: Database.Database | null = null

/**
 * 获取数据库文件路径
 */
const getDatabasePath = () => {
    if (process.env.NODE_ENV === 'development') {
        // 在开发环境中，数据库文件放在项目根目录
        return path.join(process.cwd(), 'database.db')
    } else {
        // 在生产环境中，数据库文件放在用户数据目录
        return path.join(app.getPath('userData'), 'database.db')
    }
}

/**
 * 初始化数据库
 */
export function initDatabase() {
    try {
        const dbPath = getDatabasePath()
        db = new Database(dbPath)

        // 启用外键约束
        db.pragma('foreign_keys = ON')

        // 仅创建用户表（存放本地账号与密码）
        db.exec(`
            CREATE TABLE IF NOT EXISTS users (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                userId TEXT,
                username TEXT UNIQUE NOT NULL,
                password TEXT NOT NULL,
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)

        // 用户档案表（离线缓存）
        db.exec(`
            CREATE TABLE IF NOT EXISTS user_profiles (
                id INTEGER PRIMARY KEY AUTOINCREMENT,
                store_user_id TEXT UNIQUE NOT NULL,
                profile_data TEXT NOT NULL,
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)

        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_desk (
                id TEXT PRIMARY KEY,                       -- 主键
                store_id TEXT,                              -- 商户ID
                shop_id TEXT,                               -- 门店ID
                name TEXT,                                  -- 桌台名称
                category_id TEXT,                           -- 桌台分类ID
                region_id TEXT,                             -- 台区ID
                server_clerk_id TEXT,                       -- 服务店员ID
                capacity INTEGER,                           -- 最多容纳人数
                parent_id TEXT,                             -- 父桌台ID
                qr_url TEXT,                                -- 桌台二维码地址
                status INTEGER,                             -- 1:显示 0:隐藏
                sort INTEGER,                               -- 排序 越小越靠前
                is_use INTEGER,                             -- 0:空闲 1:使用中 2:预定
                type INTEGER,                               -- 0:普通桌台 1:外卖桌台
                is_delete INTEGER,                          -- 删除标记
                create_time INTEGER,                        -- 创建时间(秒级时间戳)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)

        // 桌台订单表（映射后端 yoshop_store_shop_desk_order）
        // 说明：decimal(10,2) 在 SQLite 中使用 REAL 存储；char/varchar 使用 TEXT；tinyint 使用 INTEGER
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_desk_order (
                id TEXT PRIMARY KEY,                        -- 主键
                order_no TEXT NOT NULL,                     -- 订单号
                store_id TEXT NOT NULL,                     -- 商户ID
                shop_id TEXT NOT NULL,                      -- 门店ID
                user_id TEXT NOT NULL DEFAULT '0',          -- 会员ID
                open_clerk_id TEXT NOT NULL DEFAULT '0',    -- 开台店员ID
                end_clerk_id TEXT NOT NULL DEFAULT '0',     -- 收银店员ID
                record_ids TEXT NOT NULL,                   -- 使用记录id,逗号隔开
                desk_name TEXT NOT NULL DEFAULT '',         -- 桌台名称
                foodgroup_id TEXT NOT NULL DEFAULT '0',     -- 套餐ID
                foodgroup_money REAL NOT NULL DEFAULT 0.0,  -- 每个套餐金额
                menu_id TEXT NOT NULL DEFAULT '0',          -- 菜谱ID
                model_money REAL NOT NULL DEFAULT 0.0,      -- 订单原价(仅计算会员价总价)
                order_money REAL NOT NULL DEFAULT 0.0,      -- 订单金额(已计算折扣,会员价)
                un_discount_money REAL NOT NULL DEFAULT 0.0,-- 不打折金额
                reduce_money REAL NOT NULL DEFAULT 0.0,     -- 调整零头金额
                coupon_id TEXT NOT NULL DEFAULT '0',        -- 优惠券ID
                coupon_money REAL NOT NULL DEFAULT 0.0,     -- 优惠券优惠金额
                service_money REAL NOT NULL DEFAULT 0.0,    -- 服务费
                is_vip INTEGER NOT NULL DEFAULT 0,          -- 是否使用会员价 0/1
                order_discount REAL NOT NULL DEFAULT 10.0,  -- 整单折扣 1-10 10为不打折
                user_discount REAL NOT NULL DEFAULT 10.0,   -- 会员折扣 1-10 10为不打折
                pay_money REAL NOT NULL DEFAULT 0.0,        -- 应付金额
                real_pay_money REAL NOT NULL DEFAULT 0.0,   -- 实际支付金额
                unclosing_real_pay_money REAL NOT NULL DEFAULT 0.0, -- 实际反结账金额
                is_book INTEGER NOT NULL DEFAULT 0,         -- 是否预定 0/1
                book_id TEXT NOT NULL DEFAULT '0',          -- 预定ID
                is_present INTEGER NOT NULL DEFAULT 0,      -- 是否赠送 0/1
                calculate_type INTEGER NOT NULL DEFAULT 0,  -- 价格计算方式 0默认 1余额支付
                pay_status INTEGER NOT NULL DEFAULT 0,      -- 支付状态 0未支付 1已支付 2支付中
                pay_time INTEGER NOT NULL DEFAULT 0,        -- 支付时间(秒)
                is_unclosing INTEGER NOT NULL DEFAULT 0,    -- 反结账状态 0/1
                remarks TEXT NOT NULL,                      -- 备注
                is_delete INTEGER NOT NULL DEFAULT 0,       -- 删除标记
                create_time INTEGER NOT NULL,               -- 创建时间(秒)
                update_time INTEGER NOT NULL                -- 更新时间(秒)
            )
        `)
        // 索引
        db.exec(`CREATE INDEX IF NOT EXISTS idx_desk_order_order_no ON store_shop_desk_order(order_no)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_desk_order_store_shop ON store_shop_desk_order(store_id, shop_id)`)

        // 菜品表（映射后端 yoshop_store_shop_food）
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_food (
                id TEXT PRIMARY KEY,                        -- 主键
                store_id TEXT NOT NULL DEFAULT '0',          -- 商户ID
                name TEXT NOT NULL DEFAULT '',               -- 菜品名称
                sub_name TEXT NOT NULL,                      -- 搜索名
                category_id TEXT NOT NULL DEFAULT '0',       -- 菜品分类ID
                spec_type INTEGER NOT NULL DEFAULT 0,        -- 规格(10单 20多)
                is_enable_grade INTEGER NOT NULL DEFAULT 0,  -- 是否开启会员折扣 0/1
                is_order_discount INTEGER NOT NULL DEFAULT 0,-- 是否开启整单折扣 0/1
                is_group INTEGER NOT NULL DEFAULT 0,         -- 是否套餐 0/1
                commission REAL NOT NULL DEFAULT 0.0,        -- 员工提成(元)
                content TEXT NOT NULL,                       -- 描述
                is_weight INTEGER NOT NULL DEFAULT 0,        -- 是否计重 0/1
                stalls TEXT NOT NULL DEFAULT '',             -- 档口
                sort INTEGER NOT NULL DEFAULT 10,            -- 排序(小在前)
                status INTEGER NOT NULL DEFAULT 10,          -- 状态(10上架 20下架)
                is_delete INTEGER NOT NULL DEFAULT 0,        -- 删除标记
                create_time INTEGER NOT NULL DEFAULT 0,      -- 创建时间(秒)
                is_write_food INTEGER NOT NULL DEFAULT 0,    -- 是否手写菜品 0/1
                is_user INTEGER NOT NULL DEFAULT 1,          -- 是否用户端展示 0/1
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_food_store ON store_shop_food(store_id)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_food_category ON store_shop_food(category_id)`)
        // 门店绑定菜品/估清（映射 yoshop_store_shop_food_bind）
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_food_bind (
                id TEXT PRIMARY KEY,                        -- 主键
                food_id TEXT NOT NULL DEFAULT '0',           -- 菜品ID
                store_id TEXT NOT NULL DEFAULT '0',          -- 商城ID
                shop_id TEXT NOT NULL DEFAULT '0',           -- 店铺ID
                status INTEGER NOT NULL DEFAULT 10,          -- 状态(10上架 20下架)
                max INTEGER NOT NULL DEFAULT -1,             -- 总库存量
                num INTEGER NOT NULL DEFAULT -1,             -- 数量(-1为不计算)
                is_delete INTEGER NOT NULL DEFAULT 0,        -- 是否删除(0否,1是)
                create_time INTEGER NOT NULL DEFAULT 0,      -- 创建时间(秒)
                update_time INTEGER NOT NULL DEFAULT 0,      -- 更新时间(秒)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_food_bind_store_shop ON store_shop_food_bind(store_id, shop_id)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_food_bind_food ON store_shop_food_bind(food_id)`)

        // 菜品SKU表（映射 yoshop_store_shop_food_sku）
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_food_sku (
                id TEXT PRIMARY KEY,                        -- 记录ID
                food_sku_id TEXT NOT NULL DEFAULT '0',       -- 菜品sku唯一标识(由规格id组成)
                food_id TEXT NOT NULL DEFAULT '0',           -- 商品ID
                foodgroup_id TEXT NOT NULL DEFAULT '0',      -- 套餐id(0:普通菜品)
                image_id TEXT NOT NULL DEFAULT '0',          -- 规格图片ID
                food_sku_no TEXT NOT NULL DEFAULT '',        -- 商品sku编码
                price REAL NOT NULL DEFAULT 0.0,             -- 菜品价格
                line_price REAL NOT NULL DEFAULT 0.0,        -- 划线价
                member_price REAL NOT NULL DEFAULT 0.0,      -- 会员价
                unit TEXT NOT NULL DEFAULT '',               -- 单位
                food_props TEXT NOT NULL DEFAULT '',         -- SKU规格属性(json)
                spec_value_ids TEXT NOT NULL DEFAULT '',     -- 规格值ID集(json)
                is_weight INTEGER NOT NULL DEFAULT 0,        -- 是否计重 0/1
                is_delete INTEGER NOT NULL DEFAULT 0,        -- 是否删除
                store_id TEXT NOT NULL DEFAULT '0',          -- 商城ID
                create_time INTEGER NOT NULL DEFAULT 0,      -- 创建时间(秒)
                update_time INTEGER NOT NULL DEFAULT 0,      -- 更新时间(秒)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_food_sku_store ON store_shop_food_sku(store_id)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_food_sku_food ON store_shop_food_sku(food_id)`)
        // 桌台使用记录表（映射 yoshop_store_shop_desk_record）
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_desk_record (
                id TEXT PRIMARY KEY,                        -- 主键
                store_id TEXT NOT NULL,                      -- 商城ID
                shop_id TEXT NOT NULL,                       -- 店铺ID
                desk_id TEXT NOT NULL,                       -- 桌台ID
                order_id TEXT NOT NULL DEFAULT '0',          -- 订单ID
                user_id TEXT NOT NULL DEFAULT '0',           -- 会员用户ID
                clerk_id TEXT NOT NULL DEFAULT '0',          -- 开台收银员ID
                is_book INTEGER NOT NULL DEFAULT 0,          -- 是否预定 0/1
                book_id TEXT NOT NULL DEFAULT '0',           -- 预订id
                book_time INTEGER NOT NULL DEFAULT 0,        -- 预定时间
                keep_time INTEGER NOT NULL DEFAULT 30,       -- 预留时长(分钟)
                book_status INTEGER NOT NULL DEFAULT 1,      -- 1未开台 2开台 3结束 4过期
                use_num INTEGER NOT NULL DEFAULT 0,          -- 就餐人数
                adult_num INTEGER NOT NULL DEFAULT 0,        -- 成人就餐人数
                elderly_num INTEGER NOT NULL DEFAULT 0,      -- 老人就餐人数
                children_num INTEGER NOT NULL DEFAULT 0,     -- 儿童就餐人数
                open_type INTEGER NOT NULL DEFAULT 10,       -- 10普通 20搭台 30并台 40转台 50多席开台
                target_record_id TEXT NOT NULL DEFAULT '0',  -- 目标记录ID/多席开台主ID
                settle_type INTEGER NOT NULL DEFAULT 20,     -- 结算方式 10酒席 20散点
                open_num INTEGER NOT NULL DEFAULT 1,         -- 多席开台-开台席数
                money REAL NOT NULL DEFAULT 0.0,             -- 多席开台-单席金额
                status INTEGER NOT NULL DEFAULT 1,           -- 1未上齐 2催菜 3等叫 4已上齐 5已结账 6已退桌
                start_time INTEGER NOT NULL DEFAULT 0,       -- 开台时间
                end_time INTEGER NOT NULL DEFAULT 0,         -- 结束时间
                is_vip INTEGER NOT NULL DEFAULT 0,           -- 是否使用会员优惠 0/1
                member_discount REAL NOT NULL DEFAULT 10.0,  -- 会员折扣 1-10 10为不打折
                order_discount REAL NOT NULL DEFAULT 10.0,   -- 整单折扣 1-10 10为不打折
                is_lock INTEGER NOT NULL DEFAULT 0,          -- 收银端锁定 0未 1已 2已预结
                user_lock INTEGER NOT NULL DEFAULT 0,        -- 用户端锁定 0未 1已
                is_used INTEGER NOT NULL DEFAULT 0,          -- 是否正在使用 0/1
                desk_no TEXT NOT NULL DEFAULT '',            -- 桌台号
                is_delete INTEGER NOT NULL DEFAULT 0,
                remark TEXT NOT NULL DEFAULT '',             -- 备注
                update_time INTEGER NOT NULL DEFAULT 0,      -- 更新时间(秒)
                create_time INTEGER NOT NULL,                -- 创建时间(秒)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_desk_record_store_shop ON store_shop_desk_record(store_id, shop_id)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_desk_record_desk ON store_shop_desk_record(desk_id)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_desk_record_order ON store_shop_desk_record(order_id)`)

        // 桌台订单菜品表（映射 yoshop_store_shop_desk_order_food）
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_desk_order_food (
                id TEXT PRIMARY KEY,
                store_id TEXT NOT NULL,
                shop_id TEXT NOT NULL,
                clerk_id TEXT NOT NULL DEFAULT '0',         -- 点菜收银员ID
                desk_id TEXT NOT NULL,                       -- 桌台ID
                record_id TEXT NOT NULL,                     -- 桌台记录ID
                is_write_food INTEGER NOT NULL DEFAULT 0,    -- 是否手写菜品 0/1
                write_food_name TEXT NOT NULL DEFAULT '',    -- 手写菜品名称
                category_id TEXT NOT NULL DEFAULT '0',       -- 手写菜品分类ID
                food_sku_id TEXT NOT NULL DEFAULT '0',       -- 菜品skuId
                order_id TEXT NOT NULL DEFAULT '0',          -- 订单ID
                num REAL NOT NULL DEFAULT 0.0,               -- 数量
                unclosing_num REAL NOT NULL DEFAULT 0.0,     -- 反结账数量
                desk_num INTEGER NOT NULL DEFAULT 1,         -- 上菜席数
                is_weight INTEGER NOT NULL DEFAULT 0,        -- 是否计重 0/1
                edit_price REAL NOT NULL DEFAULT 0.0,        -- 直接修改金额
                price REAL NOT NULL DEFAULT 0.0,             -- 原价
                member_price REAL NOT NULL DEFAULT 0.0,      -- 会员价
                model_price REAL NOT NULL DEFAULT 0.0,       -- 使用的价格
                is_vip INTEGER NOT NULL DEFAULT 0,           -- 是否使用会员价 0/1
                write_making TEXT NOT NULL,                  -- 手写做法数组
                total_making_money REAL NOT NULL DEFAULT 0.0,-- 做法总附加金额
                write_taste TEXT NOT NULL,                   -- 手写口味数组
                position TEXT NOT NULL,                      -- 部位名称
                order_discount REAL NOT NULL DEFAULT 10.0,   -- 整单折扣 1-10
                member_discount REAL NOT NULL DEFAULT 10.0,  -- 会员折扣 1-10
                discount REAL NOT NULL DEFAULT 10.0,         -- 单品折扣 1-10
                model_discount REAL NOT NULL DEFAULT 10.0,   -- 使用的折扣 1-10
                discount_type INTEGER NOT NULL DEFAULT 0,    -- 折扣类型 0无 1单品 2整单 3会员
                un_discount_ratio REAL NOT NULL DEFAULT 0.0, -- 不打折百分比
                money REAL NOT NULL DEFAULT 0.0,             -- 单价
                total_money REAL NOT NULL DEFAULT 0.0,       -- 总价
                unclosing_total_money REAL NOT NULL DEFAULT 0.0, -- 反结账金额
                is_present INTEGER NOT NULL DEFAULT 0,       -- 2部分赠送 1赠送 0非赠送
                is_group INTEGER NOT NULL DEFAULT 0,         -- 是否套餐 0/1
                present_num REAL NOT NULL DEFAULT 0.0,       -- 赠送数量
                belong_type INTEGER NOT NULL DEFAULT 1,      -- 归属 1全席 2本桌所有
                is_after_add INTEGER NOT NULL DEFAULT 0,     -- 是否订单创建后增加 0/1
                status INTEGER NOT NULL DEFAULT 1,           -- 0待确认 1起菜 2催菜 3等叫 4已上菜 5退菜
                wait_time INTEGER NOT NULL DEFAULT 0,        -- 等叫时间
                print INTEGER NOT NULL DEFAULT 1,            -- 起菜打印 0不打 1待打 2已打
                is_unclosing INTEGER NOT NULL DEFAULT 0,     -- 反结账状态 0/1
                remarks TEXT NOT NULL,                       -- 备注
                is_delete INTEGER NOT NULL DEFAULT 0,        -- 删除标记
                create_time INTEGER NOT NULL,                -- 创建时间(秒)
                update_time INTEGER NOT NULL DEFAULT 0,      -- 更新时间(秒)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_order_food_store_shop ON store_shop_desk_order_food(store_id, shop_id)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_order_food_record ON store_shop_desk_order_food(record_id)`)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_order_food_order ON store_shop_desk_order_food(order_id)`)

        // 店铺打印机表（映射 yoshop_store_shop_printer）
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_printer (
                printer_id TEXT PRIMARY KEY,                -- 打印机ID
                computer_id TEXT NOT NULL DEFAULT '0',      -- 电脑ID
                nick_name TEXT NOT NULL DEFAULT '',         -- 打印机昵称
                real_name TEXT NOT NULL DEFAULT '',         -- 打印机名称
                status INTEGER NOT NULL DEFAULT 1,          -- 状态(0关闭 1开启)
                type INTEGER NOT NULL DEFAULT 0,            -- 类型(0收银打印机 1厨房打印机)
                store_id TEXT NOT NULL DEFAULT '0',         -- 商城ID
                shop_id TEXT NOT NULL DEFAULT '0',          -- 店铺ID
                is_delete INTEGER NOT NULL DEFAULT 0,       -- 是否删除(0否 1是)
                create_time INTEGER NOT NULL DEFAULT 0,     -- 创建时间(秒)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_printer_store_shop ON store_shop_printer(store_id, shop_id)`)

        // 打印机设置表（映射 yoshop_store_shop_printer_setting）
        // 兼容旧表：如果不存在正确的 setting_id 字段，则重建
        // try {
        //     const cols: Array<{ name: string }> = getDatabase().prepare("PRAGMA table_info('store_shop_printer_setting')").all() as any
        //     const hasSettingId = cols?.some(c => c.name === 'setting_id')
        //     if (cols?.length && !hasSettingId) {
        //         getDatabase().exec('DROP TABLE IF EXISTS store_shop_printer_setting')
        //     }
        // } catch { }
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_printer_setting (
                setting_id TEXT PRIMARY KEY,                 -- 设置ID
                key TEXT NOT NULL DEFAULT '',             -- 设置项标示
                describe TEXT NOT NULL DEFAULT '',        -- 设置项描述
                "values" TEXT NOT NULL,                     -- 设置内容(JSON)
                store_id TEXT NOT NULL DEFAULT '0',          -- 商城ID
                shop_id TEXT NOT NULL DEFAULT '0',           -- 店铺ID
                printer_id TEXT NOT NULL DEFAULT '0',        -- 打印机ID
                create_time INTEGER NOT NULL DEFAULT 0,      -- 创建时间(秒)
                update_time INTEGER NOT NULL DEFAULT 0,      -- 更新时间(秒)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_printer_setting_store ON store_shop_printer_setting(store_id)`)

        // 电脑表（映射 yoshop_store_shop_computer）
        db.exec(`
            CREATE TABLE IF NOT EXISTS store_shop_computer (
                computer_id TEXT PRIMARY KEY,                -- 电脑ID
                nick_name TEXT NOT NULL DEFAULT '',          -- 电脑昵称
                real_name TEXT NOT NULL DEFAULT '',          -- 电脑名称
                store_id TEXT NOT NULL DEFAULT '0',          -- 商城ID
                shop_id TEXT NOT NULL DEFAULT '0',           -- 店铺ID
                is_delete INTEGER NOT NULL DEFAULT 0,        -- 是否删除(0否 1是)
                create_time INTEGER NOT NULL DEFAULT 0,      -- 创建时间(秒)
                created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
                updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
            )
        `)
        db.exec(`CREATE INDEX IF NOT EXISTS idx_computer_store_shop ON store_shop_computer(store_id, shop_id)`)

        // 迁移：补齐缺失列（例如旧库无 userId 列）
        try {
            const columns = getDatabase().prepare("PRAGMA table_info('users')").all() as Array<{ name: string }>
            const hasUserId = columns.some(c => c.name === 'userId')
            if (!hasUserId) {
                getDatabase().prepare('ALTER TABLE users ADD COLUMN userId TEXT').run()
            }
        } catch (e) {
            console.warn('检查/迁移 users 表结构失败:', e)
        }

        console.log('数据库初始化成功:', dbPath)

        return db
    } catch (error) {
        console.error('数据库初始化失败:', error)
        throw error
    }
}

/**
 * 获取数据库实例
 */
export function getDatabase(): Database.Database {
    if (!db) {
        throw new Error('数据库未初始化，请先调用 initDatabase()')
    }
    return db
}

/**
 * 关闭数据库连接
 */
export function closeDatabase() {
    if (db) {
        db.close()
        db = null
    }
}

// 已移除所有示例表及默认数据逻辑

/**
 * 数据库操作工具函数
 */
export const dbUtils = {
    /**
     * 执行查询
     */
    query(sql: string, params: any[] = []): any[] {
        const stmt = getDatabase().prepare(sql)
        return stmt.all(params)
    },

    /**
     * 执行单条查询
     */
    queryOne(sql: string, params: any[] = []): any {
        const stmt = getDatabase().prepare(sql)
        return stmt.get(params)
    },

    /**
     * 执行插入/更新/删除
     */
    execute(sql: string, params: any[] = []): Database.RunResult {
        const stmt = getDatabase().prepare(sql)
        return stmt.run(params)
    },

    /**
     * 事务执行
     */
    transaction(callback: () => void) {
        getDatabase().transaction(callback)()
    }
}

export default dbUtils
